/** \file gr_math.h */
#pragma once

#include "gr_numeric_types.h"
#include "Eigen/Geometry"

namespace gr{

/** Return a matrix of type m set to identity */
template<class M>
M identity(){M m; m.setIdentity(); return m;}

/** Return a representation of 3d point. */
inline vec4 vec4AsPoint3(float x, float y, float z){return vec4(x, y, z, 1.0f);} 

/** Return a representation of 3d vector. */
inline vec4 vec4AsVec3(float x, float y, float z){return vec4(x, y, z, 0.f);} 

/** Return a representation of 3d vector */
//inline vec4

struct Transform
{
public:
    Eigen::Transform<float,3,Eigen::Affine> transform;

};

}
